#include <pthread.h>
#include <iostream>
#include <unistd.h>
#include <cstring>

using namespace std;

// void *threadRun(void *arg)
// {
//     int cnt = 3;
//     while (cnt--)
//     {
//         cout << (char *)arg << endl;
//         sleep(1);
//     }

//     pthread_exit((void *)1234);
// }

// int main()
// {
//     pthread_t tid;
//     pthread_create(&tid, NULL, threadRun, (void *)"thread-1");

//     sleep(1);
//     pthread_cancel(tid);
//     void *ret;
//     pthread_join(tid, &ret);
//     cout << "thread exit, ret: " << (int64_t)ret << endl;

//     return 0;
// }

// void *threadRun(void *arg)
// {
//     pthread_detach(pthread_self());
//     cout << (char *)arg << endl;
//     return nullptr;
// }

// int main()
// {
//     pthread_t tid;
//     pthread_create(&tid, NULL, threadRun, (void *)"thread-1");

//     sleep(1);//要让线程先分离再等待
//     errno = pthread_join(tid, nullptr);
//     cout << errno << ": " << strerror(errno) << endl;

//     return 0;
// }

// int main()
// {
//     pthread_t tid;
//     pthread_create(&tid, nullptr, threadRun, (void *)"thread - 1");

//     cout << "join..." << endl;
//     int ret = pthread_join(tid, nullptr);
//     cout << ret << ": " << strerror(ret) << endl;

//     return 0;
// }

__thread int g_val = 10;

// void *threadrun(void *arg)
// {
//     cout << "g_val = " << g_val << " &g_val = " << &g_val << endl;

//     pthread_exit(nullptr);
// }

// int main()
// {
//     pthread_t tid;
//     pthread_create(&tid, nullptr, threadrun, nullptr);

//     sleep(1);
//     cout << "g_val = " << g_val << " &g_val = " << &g_val << endl;

//     return 0;
// }